home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / fb386 / tool / watanabe / menu / menu.bas < prev    next >
BASIC Source File  |  1995-01-19  |  22KB  |  564 lines

  1. 1000 '*********************************************************************
  2. 1010 '*                         メニュー画面    v0.80c                    *
  3. 1020 '*                                   1994年12月12日(月) (C)渡辺 良一 *
  4. 1030 '*********************************************************************
  5. 1040 '
  6. 1050 '
  7. 1060 '
  8. 1070 '
  9. 1080 '★変数表(主なもの)
  10. 1090 '  表示$ ・・・・・・ 表示する内容
  11. 1100 '  FILE$ ・・・・・・ ファイルの名前
  12. 1110 '  FS&   ・・・・・・ ファイルのサイズ(EUP演奏時のみ使用)
  13. 1120 '  P    ・・・・・・ ページ
  14. 1130 '  C    ・・・・・・ カーソル
  15. 1140 '  演奏  ・・・・・・ EUPファイルをロードする変数
  16. 1150 '
  17. 1160 '
  18. 1170 '
  19. 1180 'beep 363523,20,1200
  20. 1190 IF FRE(4)<200000 THEN *END
  21. 1200 CLEAR,,2048,FRE(4)-100000,6,0
  22. 1210 STOP OFF:BGM 1
  23. 1220 LOADM"keyclear.rex",0
  24. 1230 DEF FONT"システム   16ドット"
  25. 1240 ON ERROR GOTO *ERROR
  26. 1250 DEFINT A-Z,P,C,項,演,曲,エ,色,変
  27. 1260 DIM 題$(7),項目数(7),表示$(7,9,9),FILE$(7,9,9),FS&(9,9),入力$(1)
  28. 1270 '↓BASICのバージョンを調べる(Ver1以下だと VER=0)
  29. 1280 IF PEEK(&H30D2,4)=&H20312E32 THEN VER=1 'VER 2.1 L10
  30. 1290 IF PEEK(&H30DA,4)=&H20312E32 THEN VER=2 'VER 2.1 L10 M
  31. 1300 '★★★メニューファイル読み込み★★★
  32. 1310   OPEN "I",#1,"menu.dat"
  33. 1320   INPUT#1,MS
  34. 1330   FOR I=0 TO MS
  35. 1340     LINE INPUT#1,題$(I)
  36. 1350     INPUT#1,項目数(I)
  37. 1360     P=0:項目数=項目数(I)
  38. 1370     WHILE 項目数>0
  39. 1380       FOR J=0 TO 9
  40. 1390         IF (I=0 AND (J<2 OR 7<J OR MS+1<J)) OR (I=1 AND P=0 AND J=0)                    OR J>=項目数 THEN *NEXT
  41. 1400         LINE INPUT#1,表示$(I,P,J)
  42. 1410         IF I>0 THEN LINE INPUT#1,FILE$(I-1,P,J) 'メインメニューでないなら
  43. 1420         IF I=1 AND (P OR J) THEN INPUT#1,FS&(P,J)  'EUPメニューなら
  44. 1430       *NEXT:NEXT J
  45. 1440       P=P+1:項目数=項目数-10
  46. 1450     WEND
  47. 1460   NEXT I:CLOSE #1
  48. 1470 '
  49. 1480 *環境初期化
  50. 1490   エラー=1
  51. 1500   SCREEN 0:SCREEN@0
  52. 1510   WINDOW(0,0)-(639,479)
  53. 1520   VIEW  (0,0)-(639,479)
  54. 1530   WIDTH 80,25
  55. 1540   DEF SPRITE 99,0
  56. 1550   '+++++パレット初期化+++++++++++++++++++
  57. 1560   FOR P=0 TO 15
  58. 1570     READ G,R,B
  59. 1580     PALETTE P,[G,R,B]
  60. 1590   NEXT
  61. 1600    DATA &h00,&h00,&h00, &h00,&h00,&h80, &h00,&h80,&h00, &h00,&h80,&h80
  62. 1610    DATA &h80,&h00,&h00, &h80,&h00,&h80, &h80,&h80,&h00, &h80,&h80,&h80
  63. 1620    DATA &h40,&h40,&h40, &h00,&H00,&hf0, &h00,&hf0,&h00, &h00,&hf0,&Hf0
  64. 1630   'DATA &hf0,&h00,&h00, &hf0,&H00,&hf0, &hf0,&hf0,&h00, &hf0,&hf0,&Hf0
  65. 1640    DATA &hd0,&h00,&h00, &hd0,&H00,&hd0, &hf0,&hf0,&h00, &hd0,&hd0,&Hd0
  66. 1650   '+++++PFキー初期化++++++++++++++++++
  67. 1660   FOR K=1 TO 10
  68. 1670     READ K$:KEY K,K$
  69. 1680   NEXT
  70. 1690    DATA "M","B","S","H","D","R","N","E","Q","P"
  71. 1700   CC=1:X=48:Y=128
  72. 1710   題$(0)="メインメニュー"
  73. 1720   題$(1)="BGMメニュー"
  74. 1730   表示$(0,0,0)="このプログラムを終了する。"
  75. 1740   表示$(0,0,1)="BGMを選択する。"
  76. 1750   表示$(0,0,8)="電源を切断する。"
  77. 1760   表示$(0,0,9)="BASICを終了する。"
  78. 1770   表示$(1,0,0)="演奏を停止する。"
  79. 1780 '********************************************************************
  80. 1790 *初期表示
  81. 1800   COLOR 7,%12,%15,4:CLS:CONSOLE 0,24,2
  82. 1810   LINE(55,108)-(630,379),PSET, %4,BF, %4 '影
  83. 1820   LINE(33, 91)-(606,111),PSET, %3,BF, %3 '枠(プログラム名とVER)
  84. 1830   LINE(33,112)-(606,360),PSET,%15,BF,%15 '枠(項目)
  85. 1840   LINE(32, 90)-(607,361),PSET, %0,B      '淵
  86. 1850   SYMBOL(160,93),"メニュー画面        Version 0.80c ----- by Ryoichi.w"                          ,1,1,%15
  87. 1860   LINE(560,462)-(640,480),PSET,%0,BF,%6 'かな漢字変換のところ
  88. 1870   '+++++PFキー表示+++++++++++++++++++
  89. 1880   RESTORE *PFKEY_DATA
  90. 1890   FOR I=0 TO 9
  91. 1900     XX=I*48+46:IF I>4 THEN XX=XX+20
  92. 1910     LINE(XX,462)-STEP(38,20),PSET,%0,BF,%6
  93. 1920     READ K$
  94. 1930     SYMBOL(XX+4,463),K$,1,1,%15
  95. 1940   NEXT
  96. 1950   *PFKEY_DATA
  97. 1960    DATA "メイン" ,"BGM" ,"記録","編集","削除"
  98. 1970    DATA "前頁","次頁","END" ,"終了","POFF"
  99. 1980   GOSUB *メッセージ:LOCATE 67,6:PRINT"ページ"
  100. 1990 '********************************************************************
  101. 2000 '
  102. 2010 *表示  'ページだけ移動させるときは、ここを実行しない
  103. 2020   色=15:GOSUB *LINE
  104. 2030   IF CC THEN C=0:P=0:X=48:Y=152 ELSE CC=1
  105. 2040          '↑CC=0 以外でカーソル位置をクリアする
  106. 2050   色=13:GOSUB *LINE
  107. 2060   COLOR 0,,,4
  108. 2070   LOCATE 6,6:PRINT SPC(59)
  109. 2080   LOCATE 40-LEN(題$(MN))\2,6:PRINT 題$(MN)
  110. 2090 *表示2
  111. 2100   COLOR 0,,,4:LOCATE 65,6
  112. 2110   PRINT AKCNV$(RIGHT$(STR$(P),1))
  113. 2120   GOSUB *表示3
  114. 2130 '
  115. 2140 *キー入力
  116. 2150   K$=INKEY$:IF K$="" THEN *キー入力
  117. 2160          '↓エラーメッセージが表示されてればそれ消す
  118. 2170   IF EM THEN GOSUB *メッセージ:EM=0:GOSUB *キー入力
  119. 2180   CALLM 0
  120. 2190     IF K$="M" AND MN>0  THEN MN=0:P=0:GOTO *表示             'PF1
  121. 2200     IF K$="B" AND MN<>1 THEN MN=1:GOTO *表示                  'PF2
  122. 2210     IF K$="S" AND 変更 THEN *セーブ '変更点があれば           'PF3
  123. 2220     IF K$="H" THEN *編集                                      'PF4
  124. 2230     IF K$="D" AND 表示$(MN,P,C)<>"" THEN *削除              'PF5
  125. 2240     IF K$="R" AND P>0 AND MN>0 THEN P=P-1:GOTO *表示2     'PF6
  126. 2250     IF K$="N" AND P<9 AND MN>0 THEN P=P+1:GOTO *表示2     'PF7
  127. 2260     IF K$="E" THEN GOSUB *画面クリア:GOTO *END                'PF8
  128. 2270     IF K$="Q" THEN GOSUB *画面クリア:SYSTEM                   'PF9
  129. 2280     IF K$="P" THEN OUT &H22,&H40 '電源OFF                  'PF10
  130. 2290     '***********************************************
  131. 2300     IF K$=CHR$(28) OR K$=CHR$(29) THEN            '左右キー
  132. 2310       IF C MOD 2=0 THEN C=C+1 ELSE C=C-1
  133. 2320       GOTO *カーソル移動
  134. 2330     ELSE IF K$=CHR$(30) THEN                      '上キー
  135. 2340       IF C  \  2=0 THEN C=C+8 ELSE C=C-2
  136. 2350       GOTO *カーソル移動
  137. 2360     ELSE IF K$=CHR$(31) THEN
  138. 2370       IF C  \  2=4 THEN C=C-8 ELSE C=C+2     '下キー
  139. 2380       GOTO *カーソル移動
  140. 2390     ELSE IF K$=CHR$(13) AND 表示$(MN,P,C)<>"" THEN
  141. 2400       IF MN=0 THEN *メインメニュー 'この2つ以外は
  142. 2410       IF MN=1 THEN *BGM         'プログラムロードへ
  143. 2420     ELSE
  144. 2430       GOTO *キー入力
  145. 2440     ENDIF
  146. 2450 '
  147. 2460 'プログラムロード
  148. 2470   LM$="ロードする":RM$="RUNする"
  149. 2480   GOSUB *2択
  150. 2490   FILE$=FILE$(MN-1,P,C):DIR$=""
  151. 2500   I=KINSTR(FILE$,"\")
  152. 2510   WHILE I    'ディレクトリとファイルに分ける
  153. 2520     DIR$ =DIR$+KLEFT$(FILE$,I)
  154. 2530     FILE$=KMID$(FILE$,I+1)
  155. 2540     I=KINSTR(FILE$,"\")
  156. 2550   WEND
  157. 2560   IF LEN(FILE$)>12 THEN DIR$=".":FILE$="" ELSE IF DIR$="" THEN DIR$="."                         ELSE DIR$=LEFT$(DIR$,LEN(DIR$)-1)
  158. 2570   IF VER THEN GOSUB *ファイル書き込み:GOSUB *ウィンドウ書き込み
  159. 2580   IF X=48 THEN *LOAD ELSE *RUN
  160. 2590 '
  161. 2600 '
  162. 2610 '
  163. 2620 '******* サブルーチンなど *******************************************
  164. 2630 '
  165. 2640 *メインメニュー
  166. 2650   IF 表示$(MN,P,C)="" THEN *キー入力
  167. 2660   IF C=0 THEN GOSUB *画面クリア:GOTO *END
  168. 2670   IF C=8 THEN OUT &H22,&H40 '電源OFF
  169. 2680   IF C=9 THEN SYSTEM
  170. 2690   MN=C:P=0:GOTO *表示
  171. 2700 '********************************************************************
  172. 2710 *BGM
  173. 2720   IF P=0 AND C=0 THEN PLAY OFF:                                                                    エラー=9:CD STOP:エラー=1:GOTO *キー入力
  174. 2730   LM$="ループ演奏しない。":RM$="ループ演奏する。"
  175. 2740   GOSUB *2択
  176. 2750     IF 曲=P*10+C THEN *演奏
  177. 2760     IF 曲>0 THEN ERASE 演奏
  178. 2770     エラー=6
  179. 2780     DIM 演奏(INT(FS&(P,C)/2))
  180. 2790     曲=P*10+C:エラー=2
  181. 2800     LOAD@ FILE$(0,P,C),演奏
  182. 2810     エラー=1
  183. 2820   *演奏
  184. 2830     IF X=48 THEN PLAY@ 演奏,0 ELSE PLAY@ 演奏,1
  185. 2840     PL=1:GOTO *復帰
  186. 2850 '********************************************************************
  187. 2860 *LOAD
  188. 2870   GOSUB *画面クリア:エラー=3:SHELL"cd "+DIR$:LOAD FILE$
  189. 2880 *RUN
  190. 2890   COLOR 0,,,4:GOSUB *C18
  191. 2900   色=15:GOSUB *LINE
  192. 2910   LOCATE 10,18:PRINT"※データ読込中※"
  193. 2920   LINE(80,342)-(206,358),PSET,%14,BF,%14
  194. 2930   エラー=4:SHELL"cd "+DIR$:RUN FILE$
  195. 2940 '********************************************************************
  196. 2950 *削除
  197. 2960   IF (MN=0 AND (C<2 OR 7<C)) OR                                                 (MN=1 AND P=0 AND C=0) THEN *キー入力
  198. 2970   LM$="削除する。":RM$="削除しない。"
  199. 2980   GOSUB *2択
  200. 2990   IF X=48 THEN
  201. 3000     IF MN THEN '*******メインメニューでない**********
  202. 3010       項目数(MN)=項目数(MN)-1
  203. 3020       IF P*10+C=項目数(MN) THEN '最後の項目
  204. 3030         P2=P:C2=C
  205. 3040       ELSE
  206. 3050         FOR I=P*10+C TO 項目数(MN)
  207. 3060           P = I   \10:C = I    MOD 10
  208. 3070           P2=(I+1)\10:C2=(I+1) MOD 10
  209. 3080           表示$(MN  ,P,C)=表示$(MN  ,P2,C2)
  210. 3090           FILE$(MN-1,P,C)=FILE$(MN-1,P2,C2)
  211. 3100           IF MN=1 THEN FS&(P,C)=FS&(P2,C2)
  212. 3110         NEXT
  213. 3120       ENDIF
  214. 3130       表示$(MN  ,P2,C2)=""
  215. 3140       FILE$(MN-1,P2,C2)=""
  216. 3150       IF MN=1 THEN
  217. 3160         FS&(P2,C2)=0:K=P*10+C
  218. 3170         IF 曲=K THEN 曲=0:ERASE 演奏 ELSE IF 曲>K THEN 曲=曲-1
  219. 3180       ENDIF
  220. 3190     ELSE '*************メインメニューのとき**********
  221. 3200       IF C<MS THEN '最後の項目
  222. 3210         FOR I=C TO MS-1
  223. 3220           表示$(0,0,I)=表示$(0,0,I+1)
  224. 3230           題$(I)      =題$(I+1)
  225. 3240           項目数(I)   =項目数(I+1)
  226. 3250           FOR J=0 TO 9:FOR K=0 TO 9
  227. 3260             表示$(I  ,J,K)=表示$(I+1,J,K)
  228. 3270             FILE$(I-1,J,K)=FILE$(I  ,J,K)
  229. 3280           NEXT:NEXT
  230. 3290         NEXT
  231. 3300       ENDIF
  232. 3310       FOR J=0 TO 9:FOR K=0 TO 9
  233. 3320         表示$(MS,J,K)=""
  234. 3330         FILE$(MS,J,K)=""
  235. 3340       NEXT:NEXT
  236. 3350       表示$(0,0,MS)=""
  237. 3360       題$(MS)=""
  238. 3370       MS=MS-1
  239. 3380     ENDIF
  240. 3390     変更=1:GOSUB *表示3
  241. 3400   ENDIF
  242. 3410 GOTO *復帰
  243. 3420 '********************************************************************
  244. 3430 *セーブ
  245. 3440   LM$="ファイルに記録(セーブ)する。":RM$="記録(セーブ)しない。"
  246. 3450   GOSUB *2択
  247. 3460   IF X=48 THEN
  248. 3470     エラー=8:KILL"menu.dat"
  249. 3480     *回復
  250. 3490     エラー=5:OPEN "O",#1, "menu.dat"
  251. 3500     WRITE#1,MS
  252. 3510     FOR I=0 TO MS
  253. 3520       PRINT#1,題$(I)
  254. 3530       WRITE#1,項目数(I)
  255. 3540       P=0:項目数=項目数(I)
  256. 3550       WHILE 項目数>0
  257. 3560         FOR J=0 TO 9
  258. 3570           IF (I=0 AND (J<2 OR 7<J OR MS+1<J)) OR (I=1 AND P=0 AND J=0)                    OR J>=項目数 THEN *NEXT2
  259. 3580           PRINT#1,表示$(I,P,J)
  260. 3590           IF I>0 THEN PRINT#1,FILE$(I-1,P,J)   'メインメニューでない
  261. 3600           IF I=1 AND (P OR J) THEN WRITE#1,FS&(P,J) 'EUPメニューなら
  262. 3610         *NEXT2:NEXT J
  263. 3620         P=P+1:項目数=項目数-10
  264. 3630       WEND
  265. 3640     NEXT I
  266. 3650     CLOSE #1
  267. 3660     エラー=1:変更=0
  268. 3670     CALLM 0
  269. 3680   ENDIF
  270. 3690 GOTO *復帰
  271. 3700 '********************************************************************
  272. 3710 *編集
  273. 3720   IF (MN=0 AND (C<2 OR 7<C OR MS+1<C)) OR (MN=1 AND P=0 AND C=0)             OR 項目数(MN)<P*10+C THEN *キー入力
  274. 3730   CONSOLE 0,24,2:COLOR 7,%0,,0:CLS
  275. 3740   CC=0:E_CR0=0:E_CR1=15
  276. 3750   GOSUB *INPUT1
  277. 3760   IF MN THEN
  278. 3770     GOSUB *INPUT3
  279. 3780     IF MN=1 THEN GOSUB *INPUT4
  280. 3790   ELSE  'メインメニュー(MN=0)
  281. 3800     GOSUB *INPUT2
  282. 3810   ENDIF
  283. 3820   '******変数に出力する******
  284. 3830   変更=1:表示$(MN,P,C)=入力$(0)
  285. 3840   IF MN=0 THEN 題$(C)=入力$(1) ELSE FILE$(MN-1,P,C)=入力$(1)
  286. 3850   IF MN=0 AND MS+1=C THEN MS=MS+1
  287. 3860   IF 項目数(MN)=P*10+C THEN 項目数(MN)=項目数(MN)+1
  288. 3870 GOTO *初期表示
  289. 3880 '************************************
  290. 3890 *INPUT1
  291. 3900   PRINT"項目名を入力してください。"
  292. 3910   E_X=0:E_Y=CSRLIN:E_字数=34
  293. 3920   E_文字$=表示$(MN,P,C)
  294. 3930   GOSUB *P255
  295. 3940   GOSUB *文字編集
  296. 3950   IF E_文字$="" THEN BEEP:GOSUB *ERR:GOTO *INPUT1
  297. 3960   入力$(0)=E_文字$
  298. 3970 RETURN
  299. 3980 '************************************
  300. 3990 *INPUT2
  301. 4000   PRINT"題名を入力してください。"
  302. 4010   E_X=0:E_Y=CSRLIN:E_字数=48
  303. 4020   E_文字$=題$(C)
  304. 4030   GOSUB *P255
  305. 4040   GOSUB *文字編集
  306. 4050   IF E_文字$="" THEN BEEP:GOSUB *ERR:GOTO *INPUT2
  307. 4060   入力$(1)=E_文字$
  308. 4070 RETURN
  309. 4080 '************************************
  310. 4090 *INPUT3
  311. 4100   PRINT"ファイル名を入力してください。"
  312. 4110   E_X=0:E_Y=CSRLIN:E_字数=255
  313. 4120   E_文字$=FILE$(MN-1,P,C)
  314. 4130   GOSUB *P255
  315. 4140   GOSUB *文字編集
  316. 4150   IF E_文字$="" THEN BEEP:GOSUB *ERR:GOTO *INPUT3
  317. 4160   入力$(1)=E_文字$
  318. 4170 RETURN
  319. 4180 '************************************
  320. 4190 *INPUT4
  321. 4200    PRINT"ファイルサイズを入力してください。(単位はbyte)"
  322. 4210    E_X=0:E_Y=CSRLIN:E_字数=20
  323. 4220    E_文字$=STR$(FS&(P,C))
  324. 4230    E_文字$=RIGHT$(E_文字$,LEN(E_文字$)-1)
  325. 4240    GOSUB *P255
  326. 4250    GOSUB *文字編集
  327. 4260    IF E_文字$="" THEN BEEP:GOSUB *ERR:GOTO *INPUT4
  328. 4270    エラー=7:FS&(P,C)=VAL(E_文字$)
  329. 4280    IF 曲=P*10+C THEN 曲=0:ERASE 演奏
  330. 4290 RETURN
  331. 4300 '************************************
  332. 4310 *P255:PRINT SPC(255):RETURN
  333. 4320 *ERR :LOCATE 0,E_Y-1:PRINT"もう一度";:RETURN
  334. 4330 '********************************************************************
  335. 4340 '★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  336. 4350 '★              プログラム開発支援シリーズ第5弾        ★
  337. 4360 '★            文字列編集サブルーチン    TYPE B  v1.02             ★
  338. 4370 '★                              94年10月14日(金)  (C)渡辺 良一 ★
  339. 4380 '★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  340. 4390 '
  341. 4400 '変数紹介(先頭の『E_』は省略)
  342. 4410 '  文字$,M$     ……… 編集する文字列
  343. 4420 '  X,Y          ……… 文字を表示する文字座標
  344. 4430 '  字数         ……… 編集する文字の最大の長さ(半角計算)
  345. 4440 '  CR0          ……… 背景色
  346. 4450 '  CR1          ……… カーソルの色
  347. 4460 '  CR           ……… カーソル移動時に使用
  348. 4470 '  L,M,N,X2,Y2  ……… 文字表示時に使用(L,M,Nは↓でも使用)
  349. 4480 '  X3,Y3,Z      ……… カーソルを表示する時に使用
  350. 4490 '  C            ……… カーソルの文字列中の位置(文字数で)
  351. 4500 '  I,I2         ……… カーソルを移動させる文字座標
  352. 4510 '  K$,K         ……… 入力された文字とそのキャラクタコード
  353. 4520 '
  354. 4530 *文字編集
  355. 4540   CALLM 0
  356. 4550   GOSUB *E_文字表示
  357. 4560   E_X2=LEN(E_文字$):E_C=KLEN(E_文字$)
  358. 4570   GOSUB *E_表示
  359. 4580 *E_INKEY
  360. 4590   E_K$=INKEY$
  361. 4600   IF E_K$="" THEN *E_INKEY
  362. 4610   E_K=ASC(E_K$)
  363. 4620   '  ↓実行キー
  364. 4630   IF E_K=13 THEN GOSUB *E_消す:RETURN
  365. 4640   IF E_K=24 THEN GOSUB *E_消す:RETURN *初期表示
  366. 4650   '  ↑取消キー      復帰する場所を指定↑
  367. 4660   IF E_K=5 AND E_X2<LEN(E_文字$) THEN *E_一括削除
  368. 4670   IF E_K=8 AND E_C >0            THEN *E_後退
  369. 4680   IF E_K=127 THEN IF E_X2<E_字数 THEN *E_削除 ELSE *E_INKEY
  370. 4690   IF E_K=28 AND E_X2<LEN(E_文字$) THEN E_I= 1:GOTO *E_左右移動 '右
  371. 4700   IF E_K=29 AND E_C >0            THEN E_I=-1:GOTO *E_左右移動 '左
  372. 4710   IF E_K<32 THEN *E_INKEY    '↓日本語文字なら次も入力する
  373. 4720   IF (127<E_K AND E_K<160) OR 223<E_K THEN E_K$=E_K$+INKEY$
  374. 4730   '**** 文字入力 *********
  375. 4740   IF LEN(E_文字$)+LEN(E_K$)>E_字数 THEN BEEP:CALLM 0:GOTO *E_INKEY
  376. 4750   E_文字$=KLEFT$(E_文字$,E_C)+E_K$+KMID$(E_文字$,E_C+1)
  377. 4760   E_I=1:E_I2=LEN(E_K$):GOSUB *E_文字表示:GOTO *E_移動
  378. 4770 '
  379. 4780 *E_一括削除
  380. 4790   E_文字$=KLEFT$(E_文字$,E_C)+STRING$(LEN(E_文字$)-E_X2,32)
  381. 4800   GOSUB *E_文字表示
  382. 4810   E_文字$=KLEFT$(E_文字$,E_C)
  383. 4820   GOTO *E_INKEY
  384. 4830 *E_後退
  385. 4840   IF KTYPE(E_文字$,E_C) THEN E_I2=-2 ELSE E_I2=-1
  386. 4850   E_M$=E_文字$:E_文字$=KLEFT$(E_M$,E_C-1)
  387. 4860   IF E_C<255 THEN E_文字$=E_文字$+KMID$(E_M$,E_C+1)
  388. 4870   GOSUB *E_文字表示:E_I=-1:GOTO *E_移動
  389. 4880 *E_削除
  390. 4890   E_M$=E_文字$:E_文字$=KLEFT$(E_M$,E_C)
  391. 4900   IF E_C<254 THEN E_文字$=E_文字$+KMID$(E_M$,E_C+2)
  392. 4910   GOSUB *E_文字表示
  393. 4920   GOTO *E_INKEY
  394. 4930 *E_左右移動       '↓右移動なら+1 ↓日本語文字ならば
  395. 4940   IF KTYPE(E_文字$,29-E_K +E_C) THEN E_I2=E_I*2 ELSE E_I2=E_I
  396. 4950 '************************
  397. 4960 *E_移動
  398. 4970   E_C=E_C+E_I
  399. 4980   GOSUB *E_消す
  400. 4990   E_CR=E_CR1:E_X2=E_X2+E_I2
  401. 5000   GOSUB *E_表示
  402. 5010   GOTO *E_INKEY
  403. 5020 *E_消す:E_CR=E_CR0:GOSUB *E_書く:RETURN 'カーソル消す
  404. 5030 *E_表示  '******カーソル表示******
  405. 5040   E_X3=E_X+E_X2:E_Y3=0:E_N=0:E_Z=0
  406. 5050   WHILE E_X3>79
  407. 5060     IF E_Y3=0 THEN E_L=E_X ELSE E_L=0
  408. 5070     E_M=ASC(MID$(E_文字$,80-E_L+E_Z,1))
  409. 5080     IF (127<E_M AND E_M<160) OR 223<E_M THEN
  410. 5090       E_M=ASC(MID$(E_文字$,79-E_L+E_Z,1))
  411. 5100       E_N=1:IF (127<E_M AND E_M<160) OR 223<E_M THEN E_N=0
  412. 5110     ENDIF
  413. 5120     E_Z=E_Z+80-E_N-E_L:E_X3=E_X3-80+E_N
  414. 5130     E_N=0:E_Y3=E_Y3+1
  415. 5140   WEND
  416. 5150   E_CR=E_CR1:GOSUB *E_書く
  417. 5160 RETURN
  418. 5170 *E_書く:LINE(E_X3*8,(E_Y+E_Y3)*19)-STEP(1,15),PSET,%E_CR,B:RETURN
  419. 5180 *E_文字表示
  420. 5190   E_M$=E_文字$:E_Y2=0
  421. 5200   IF LEN(E_M$)=0 THEN LOCATE E_X,E_Y:PRINT" ";" "
  422. 5210   WHILE LEN(E_M$)
  423. 5220     E_N=LEN(E_M$)
  424. 5230     IF E_Y2=0 THEN E_L=E_X ELSE E_L=0
  425. 5240     LOCATE E_L,E_Y+E_Y2
  426. 5250     IF LEN(E_M$)+E_L<=80 THEN
  427. 5260       PRINT E_M$;" ";" ":E_M$=""
  428. 5270     ELSE
  429. 5280       E_M=ASC(MID$(E_M$,80-E_L,1))
  430. 5290       IF (127<E_M AND E_M<160) OR 223<E_M THEN E_N=0 ELSE E_N=1
  431. 5300       E_M=ASC(MID$(E_M$,79-E_L,1))
  432. 5310       IF (127<E_M AND E_M<160) OR 223<E_M THEN E_N=1
  433. 5320       PRINT LEFT$(E_M$,79+E_N-E_L);
  434. 5330       IF E_N=0 THEN PRINT" "
  435. 5340       E_M$=MID$(E_M$,80+E_N-E_L)
  436. 5350       E_Y2=E_Y2+1
  437. 5360     ENDIF
  438. 5370   WEND
  439. 5380   RETURN
  440. 5390 '********************************************************************
  441. 5400 *2択
  442. 5410   COLOR 3,,,0:GOSUB *C18
  443. 5420   LOCATE 23-KLEN(LM$),18:PRINT LM$
  444. 5430   LOCATE 58-KLEN(RM$),18:PRINT RM$
  445. 5440   XX=X:YY=Y:X=48:Y=342  '現在のカーソルの位置を、XXとYYに記憶しておく
  446. 5450   色=13:GOSUB *LINE
  447. 5460 *キー入力3
  448. 5470   K$=INKEY$
  449. 5480     IF K$="" THEN *キー入力3
  450. 5490     IF K$=CHR$(13) THEN RETURN            'リターン(実行)キー
  451. 5500     IF K$=CHR$(24) THEN RETURN *復帰      '取消キー
  452. 5510     IF K$=CHR$(28) OR K$=CHR$(29) THEN    'カーソルの左右キー
  453. 5520       色=15:GOSUB *LINE
  454. 5530       IF X=48 THEN X=328 ELSE X=48
  455. 5540       色=13:GOSUB *LINE
  456. 5550     ENDIF
  457. 5560     GOTO *キー入力3
  458. 5570   *復帰
  459. 5580     色=15:GOSUB *LINE
  460. 5590     GOSUB *メッセージ
  461. 5600     X=XX:Y=YY           'カーソルの位置を変数に戻す
  462. 5610     IF PL THEN PL=0:MN=0:GOTO *表示 ELSE *キー入力
  463. 5620 '          ↑『BGMメニュー』から『メインメニュー』へ変わるならば
  464. 5630 '********************************************************************
  465. 5640 *表示3
  466. 5650   COLOR 2,,,0:I=0
  467. 5660   FOR YM=8 TO 16 STEP 2:LOCATE 6,YM:PRINT SPC(70):NEXT
  468. 5670   FOR YM=8 TO 16 STEP 2:FOR XM=6 TO 41 STEP 35
  469. 5680     LOCATE XM,YM:PRINT 表示$(MN,P,I):I=I+1
  470. 5690   NEXT:NEXT
  471. 5700   CALLM 0
  472. 5710 RETURN
  473. 5720 '********************************************************************
  474. 5730 *カーソル移動
  475. 5740   色=15:GOSUB *LINE      '↓Cが2の倍数(0,2,4,6,8)だったら X=48
  476. 5750   IF C AND 1 THEN X=328 ELSE X=48
  477. 5760   Y=152+(C\2)*38
  478. 5770   色=13:GOSUB *LINE
  479. 5780 GOTO *キー入力
  480. 5790 '********************************************************************
  481. 5800 *メッセージ
  482. 5810   GOSUB *C18:COLOR 0,,,4
  483. 5820   LOCATE 17,18:PRINT"↑↓←→カーソル移動     リターンキー決定"
  484. 5830 RETURN
  485. 5840 '********************************************************************
  486. 5850 *ファイル書き込み
  487. 5860   IF VER=1 THEN A&=&H83E0 ELSE A&=&H8B30
  488. 5870   FILE$=FILE$+STRING$(12-LEN(FILE$),&H00)
  489. 5880   GOTO *文字書き込み
  490. 5890 *ウィンドウ書き込み
  491. 5900   IF VER=1 THEN A&=&H9754 ELSE A&=&H9EA4
  492. 5910   FILE$=FILE$+STRING$(12-LEN(FILE$),&H20)
  493. 5920 *文字書き込み 'メモリへの書き込み
  494. 5930   FOR I=0 TO 11
  495. 5940     POKE A&+I,ASC(MID$(FILE$,I+1,1))
  496. 5950   NEXT
  497. 5960   RETURN
  498. 5970 '
  499. 5980 '******* その他 *****************************************************
  500. 5990 *LINE:LINE(X,Y)-STEP(272,16),PSET,%色,BF,%色:RETURN
  501. 6000 *C18:LOCATE 0,18:PRINT SPC(80):RETURN '18行目の文字を消す
  502. 6010 *画面クリア:COLOR 7,%0,7,0:CLS:CONSOLE 0,24,2:RETURN
  503. 6020 *END:FOR K=1 TO 10:KEY K,"":NEXT
  504. 6030   IF VER=1 THEN POKE &H83E0,0,4:POKE &H83E4,0,4:POKE &H83E8,0,4
  505. 6040   IF VER=2 THEN POKE &H8B30,0,4:POKE &H8B34,0,4:POKE &H8B38,0,4
  506. 6050   IF VER   THEN FILE$="PROGRAM":GOSUB *ウィンドウ書き込み
  507. 6060   CLEAR ,,512,FRE(4)/3,0,0
  508. 6070   END
  509. 6080 '
  510. 6090 '******** エラー処理ルーチン ****************************************
  511. 6100 *ERROR
  512. 6110   IF エラー=0 THEN
  513. 6120     CLOSE #1:MS=1
  514. 6130     項目数(0)=10:項目数(1)=1
  515. 6140     RESUME *環境初期化
  516. 6150   ENDIF
  517. 6160   IF エラー=8 THEN IF ERR=73 OR ERR=75 THEN エラー=5 ELSE RESUME *回復
  518. 6170   IF エラー=9 THEN エラー=1:RESUME *キー入力 'cdミス
  519. 6180   '++++その他のエラー++++++++++++++++++++++++
  520. 6190   ER$=STR$(ERR)
  521. 6200   ER$="エラー"+RIGHT$(ER$,LEN(ER$)-1)+"が発生しました。"
  522. 6210   BEEP:CALLM 0
  523. 6220   IF エラー=1 THEN
  524. 6230     GOSUB *画面クリア
  525. 6240     PRINT "予想外";ER$
  526. 6250     RESUME *END
  527. 6260   ELSE IF エラー=7 THEN
  528. 6270     GOSUB *ERR:RESUME *INPUT4
  529. 6280   ENDIF
  530. 6290     IF エラー=2 THEN ERASE 演奏:曲=0  'EUP読み込みのとき
  531. 6300     IF エラー<>3 THEN                 'LOADでない
  532. 6310       LINE(33,342)-(606,358),PSET,%15,BF,%15
  533. 6320       GOSUB *C18:LOCATE 6,18:COLOR 1,,,0
  534. 6330       X=XX:Y=YY      'カーソルをもとの位置に戻す
  535. 6340     ENDIF
  536. 6350     IF エラー=5 THEN E$="書き込み中" ELSE E$="読み込み中"
  537. 6360     IF エラー=6 THEN
  538. 6370       ER$="EUPファイル演奏のためのメモリが足りません。"
  539. 6380     ELSE IF ERR=5 AND MN=1 THEN
  540. 6390       ER$="ファイルサイズが実際より小さく指定されています。"
  541. 6400     ELSE IF ERR=53 OR ERR=71 THEN
  542. 6410       ER$="ディスクに不良箇所があります。"
  543. 6420     ELSE IF ERR=55 OR ERR=63 THEN
  544. 6430       ER$="ファイルが見つかりません。"
  545. 6440     ELSE IF ERR=65 OR ERR=67 THEN
  546. 6450       ER$="ディスクに空き領域がありません。"
  547. 6460     ELSE IF ERR=72 THEN
  548. 6470       ER$="指定のドライブはアクセスできない状態にあります。"
  549. 6480     ELSE IF ERR=73 THEN
  550. 6490       ER$="ディスクの書き込みが禁止されています。"
  551. 6500     ELSE IF ERR=75 THEN
  552. 6510       ER$="アクセスが拒否されました。"
  553. 6520     ELSE
  554. 6530       ER$="ファイル"+E$+"に、"+ER$
  555. 6540     ENDIF
  556. 6550     PRINT ER$
  557. 6560     IF エラー=3 THEN                   'LOADのとき
  558. 6570       PRINT"何かキーを押してください。"
  559. 6580       WHILE INKEY$="":WEND
  560. 6590       X=XX:Y=YY:CC=0 'カーソルをクリアしないようにする
  561. 6600       エラー=1:RESUME *初期表示
  562. 6610     ENDIF
  563. 6620     EM=1:エラー=1:RESUME *キー入力
  564.